home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / comm / irc / epic4-mos.lha / doc / IPV6 < prev    next >
Text File  |  2002-09-18  |  5KB  |  165 lines

  1. (connectory)
  2.         memset(&hints, 0, sizeof(hints));
  3.         hints.ai_family = family;
  4.         hints.ai_socktype = SOCK_STREAM;
  5.         if ((err = Getaddrinfo(host, port, &hints, &results)))
  6.                 return -5;
  7. ---
  8. (inet_vhostsockaddr)
  9.         /*
  10.          * Can it really be this simple?
  11.          */
  12.         memset(&hints, 0, sizeof(hints));
  13.         hints.ai_family = family;
  14.         hints.ai_socktype = SOCK_STREAM;
  15.         if (port != -1)
  16.         {
  17.                 hints.ai_flags = AI_PASSIVE;
  18.                 snprintf(p_port, 12, "%hu", port);
  19.                 p = p_port;
  20.         }
  21.  
  22.         if ((err = Getaddrinfo(LocalHostName, p, &hints, &res)))
  23.                 return -10;
  24. ---
  25. (inet_strton -- <INTERESTING>)
  26. AI_NUMERICHOST
  27.                 memset(&hints, 0, sizeof(hints));
  28.                 hints.ai_flags = flags;
  29.                 hints.ai_family = family;
  30.                 hints.ai_socktype = SOCK_STREAM;
  31.                 hints.ai_protocol = 0;
  32.  
  33.                 if ((retval = Getaddrinfo(host, port, &hints, &results))) {
  34.                     yell("getaddrinfo(%s): %s", host, gai_strerror(retval));
  35.                     return -5;
  36.                 }
  37. ---
  38. (wserv)
  39.         memset(&hints, 0, sizeof(hints));
  40.         hints.ai_flags = 0;
  41.         hints.ai_family = AF_INET;
  42.         hints.ai_socktype = SOCK_STREAM;
  43.         hints.ai_protocol = 0;
  44.  
  45.         if ((retval = getaddrinfo(host, port, &hints, &results))) {
  46.             yell("getaddrinfo(%s): %s", host, gai_strerror(retval));
  47.             my_exit(6);
  48.         }
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. -------------------------------------------------------------------------------
  59. This document details the conversion of EPIC into an IPv6 program.  If this
  60. document can be made use to anyone else, they are welcome to it.
  61.  
  62. EPIC is a particularly interesting case study for IPv4 to IPv6 transition
  63. because it touches every direction of every domain.  It is (obviously)
  64. an IPv4 client, but it is also an IPv4 server (DCCs).  It is a Unix Domain
  65. client, and it can be a Unix Domain server (but this is not in use).
  66.  
  67. Fortunately for us, all of the networking related code is contained in three
  68. subsystems (/DCC, /SERVER, and /WINDOW CREATE), and five modules: dcc.c,
  69. network.c, screen.c, server.c, and wserv.c.
  70.  
  71. EPIC has traditionally retained and stored data on an "ad hoc" basis.  Whenever
  72. a piece of data is needed, it is retrieved from whatever place is the most
  73. convenient and stashed away in a variable.  This means that some data we keep
  74. in multiple places (redundancy).  An example:  the result of a hostname lookup
  75. is an in_addr which we store as the "remote address" of the peer.  After the
  76. connect(2), getpeername(2) returns a struct sockaddr which also contains this
  77. "remote address".  Now we have two copies of the same information.  The 
  78. maintainer then is left to wonder why we have two different copies and what
  79. each copy is to be used for.
  80.  
  81. The first thing to do is take a catalog of all the data items used to store
  82. networking information.  This includes in_addr's, sockaddr's, and what they
  83. are used for and why they are kept.  We can then design a more efficient
  84. and practical list of data items stored.
  85.  
  86. CATALOG OF IPV4 DATA:
  87. ---------------------
  88. dcc.c
  89. =====
  90. in_addr        DCC_list.remote
  91. u_short        DCC_list.remport
  92. in_addr        DCC_list.local_addr
  93. u_short        DCC_list.local_port
  94.  
  95. hostent        dcc_raw_connect.hp
  96. in_addr        dcc_send_booster_ctcp.myip
  97. hostent        register_dcc_offer.hostent_fromhost
  98. sockaddr_in    process_incoming_chat.remaddr
  99. sockaddr_in    process_incoming_listen.remaddr
  100. hostent        process_incoming_listen.hp
  101. sockaddr_in    process_outgoing_file.remaddr
  102. sockaddr_in    dcc_open.remaddr
  103.  
  104. server.c/h
  105. ========
  106. in_addr        Server.local_addr
  107. sockaddr_in    Server.local_sockname;
  108. sockaddr_in    Server.remote_sockname;
  109. in_addr        Server.uh_addr;
  110.  
  111. sockaddr_in    connect_to_server.localaddr
  112. sockaddr_in    connect_to_server.remaddr
  113. in_addr        get_server_local_addr (servnum)
  114. in_addr        get_server_uh_addr (servnum)
  115.  
  116. irc.c
  117. =====
  118. in_addr        LocalHostAddr;
  119. hostent        parse_args.hp
  120.  
  121. functions.c
  122. ===========
  123. in_addr        function_iptolong.addr
  124. in_addr        function_longtoip.addr
  125.  
  126. network.c
  127. =========
  128. [include here]
  129.  
  130. commands.c
  131. ==========
  132. hostent        e_hostname.hp
  133.  
  134. CATALOG OF IPV4 FUNCTION CALLS:
  135. -------------------------------
  136. inet_aton
  137. =========
  138. dcc.c        register_dcc_offer
  139. functions.c    function_iptolong
  140. network.c    connect_by_number
  141. network.c    lame_external_resolv
  142.  
  143. inet_ntoa
  144. =========
  145. dcc.c        dcc_open
  146. dcc.c        register_dcc_offer
  147. dcc.c        process_incoming_chat
  148. dcc.c        process_incoming_listen
  149. dcc.c        process_outgoing_file
  150. functions.c    function_longtoip
  151.  
  152. gethostbyname
  153. =============
  154. commands.c    e_hostname
  155. dcc.c        dcc_raw_connect
  156. dcc.c        register_dcc_offer
  157. irc.c        parse_args
  158. network.c    lookup_host
  159.  
  160. gethostbyaddr
  161. =============
  162. dcc.c        process_incoming_listen
  163. network.c    lookup_ip (via resolv() and ip_to_host())
  164.  
  165.